Various techniques to exchange session keys for secured, authenticated or encrypted communications, as well as other secrets, are available. To encrypt communications between two networked devices, both sides must typically have the same encryption key. The sending device encrypts the communication using the session key, and the receiving device decrypts the communication using the session key to recover the original message. The two devices may be manually configured with the shared session key. Alternatively, some sort of public key exchange could be used. Although much effort has been made in the areas of public key cryptography, no provably secure method of communication has been proposed. Also, these methods are sensitive to physical and side-channel attacks.